import requests
from m3u8 import M3U8
import os


def download_video(url, save_path):
    # 设置合法请求头（模拟浏览器）
    headers = {
        'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36',
        'Referer': 'https://www.mashibing.com/'  # 防盗链关键参数
    }

    # 获取M3U8索引文件内容（如果视频是HLS流）
    response = requests.get(url, headers=headers)
    m3u8_content = M3U8(response.text)

    # 创建临时存储目录
    temp_dir = 'video_segments'
    os.makedirs(temp_dir, exist_ok=True)

    # 下载所有TS分片
    for segment in m3u8_content.segments:
        segment_url = segment.uri
        # 处理相对路径（如果需要）
        if not segment_url.startswith('http'):
            segment_url = url.rsplit('/', 1)[0] + '/' + segment_url
        # 下载分片
        with requests.get(segment_url, headers=headers, stream=True) as r:
            with open(f"{temp_dir}/{segment_url.split('/')[-1]}", 'wb') as f:
                for chunk in r.iter_content(chunk_size=1024 * 1024):
                    if chunk:
                        f.write(chunk)

    # 使用FFmpeg合并分片（需本地安装）
    os.system(f'ffmpeg -i "{temp_dir}/playlist.m3u8" -c copy "{save_path}"')

    # 清理临时文件
    # [谨慎操作，此处省略清理代码]


# 假设已通过开发者工具找到真实M3U8地址
video_url = "https://www.mashibing.com/study?courseNo=141&sectionNo=13567&systemId=132&courseVersionId=1159"
download_video(video_url, "output_video.mp4")